#pragma once

#include "Puntero.h"
#include "Iterable.h"

template <class C, class V>
class ITabla abstract
{
public:
	virtual ~ITabla(){}

	/* inserta la pareja con clave x y valor y */
	virtual void Insertar(const C x, const V y) abstract;

	/* dado una calve devuelve el valor asosciado */
	/* Pre la calve esta definida en la tabla */
	virtual V Recuperar(const C x) const abstract;

	/* borra la calve y el valor asosciado a ella de la tabla */
	//virtual bool Borrar(const C& c) abstract;

	/* borra todos los elementos de la tabla */
	//virtual void BorrarTodos() abstract;

	/* retorna true si la tabla esta vacia */
	//virtual bool EstaVacia() const abstract;

	/* retorna true si la tabla esta llena */
	//virtual bool EstaLlena() const abstract;

	/* retorna true si x es clave en la tabla */
	virtual bool EstaDefinido(const C x) const abstract;

	/* retorna un iterador con las claves de la tabla */
	//virtual Iterador<C> Claves() const abstract;

	/* retorna un iterador con los valores de la tabla */
	//virtual Iterador<V> Valores() const abstract;

	/* retorna la cantidad de elementos de la tabla */
	//virtual int Tamanio() const abstract;
	
	//virtual bool Recuperar(const C x, V &i) const abstract;

};
